#尝试进行多层列表循环赋值。
#结论:若列表使用[...]*3来初始化列表的话，会导致该列表的每个元素都指向同一个地址。
#方法使用：id(变量名)来查看变量名的地址。
#问题产生时间:2021-2-9 23:22
#问题解决时间:2021-2-10 20:07
#对应的文件:  5将已存在的xls文件用xlwt插入行(列表初始化的方式).py  内部使用了pop进行列表初始化。
a=[[1.0, 456.0, 'qq'],[2.0, 789.0, 'yun'],[3.0, 789.0, 'baidu']]
print('id(a[0])=',id(a[0]))
print('id(a[1])=',id(a[1]))
print('id(a[2])=',id(a[2]))
b=[0]*3
print('id(b[0])=',id(b[0]))
print('id(b[1])=',id(b[1]))
print('id(b[2])=',id(b[2]))
c=[b]*3
print('id(c[0])=',id(c[0]))
print('id(c[1])=',id(c[1]))
print('id(c[2])=',id(c[2]))
for i in range(0,3):
    for j in range(0,3):
        b[j]=a[i][j]
        #c[i][j]=a[i][j]
    print(b)
    c[i]=b
print(c)
print('id(c[0])=',id(c[0]))
print('id(c[1])=',id(c[1]))
print('id(c[2])=',id(c[2]))

#正确的初始化单层列表操作如下:
List1=[0]
print('List1[0]的地址为:',id(List1[0]))
List1_MaxNum=3
for i in range(1,List1_MaxNum):
    List1.append(i)
    print(f'List1[{i}]的地址为:',id(List1[i]))
print('List1=',List1)

#正确的初始化多层列表的操作如下:#1.及#2.
#1.需要使用pop()
List2=[[0]]
print('List2[0]的地址为:',id(List2[0]))
List2_minPackage_MaxNum=3#内层为3个元素
List2_MaxNum=5
for i in range (0,List2_MaxNum):#先初始化最外层的列表元素个数
    List2.append([i])
    for j in range(1,List2_minPackage_MaxNum):
        List2[i].append(j)
    print(f'List2[{i}]的地址为：',id(List2[i]))
print('未pop处理的List2=',List2)
List2.pop()#弹出最后一个多余的元素。
print('List2=',List2)

#下面这个版本比上面这个版本好一些。
#2.不需要使用pop()
List3=[[0]]
List3_minPackage_MaxNum=3
List3_MaxNum=5
for i in range(0,List3_MaxNum):#先初始化最内层的列表的元素个数
    if i==0:
        for j in range(1,List3_minPackage_MaxNum):
            List3[i].append(j)
    else:
        List3.append([i])
        for j in range(1,List3_minPackage_MaxNum):
            List3[i].append(j)
print('List3=',List3)
